home *** CD-ROM | disk | FTP | other *** search
- /*
- 386-bsd.h
-
- Hacked September/93 by Paul F. Werkowsksi for 386BSD.
- Tested on i486 EISA 16MB hardware/386BSD 0.1 + PatchKit 0.2.4
- * gcc-2.3.3
- * SGC enabled (big performance win but needs a small kernel hack)
- * Files in September-16-92-Systems.tar (PCL clcs loop clx) compile & run.
- CLUE also compiles and runs. 16 MB insufficient memory to compile CLIO.
-
- Hacked November/93 by Werkowski for FreeBSD. Essentially no changes
- except to use 'unexlin.c' instead of 'unixsave.c'. FreeBSD 1.0.2 has
- (at this time 17-Nov-93) a bug in stdio that needs repair before this will
- work - otherwise use libc.a from 386bsd pk2.4.
- The 'bug' is that vfprintf prints out a 0l0 as ' 0e+00' while
- gcl edit_double in print.d expects something like ' 0.00000000000e+00'.
- */
-
- #include "bsd.h"
- /*#include "386.h" /* NOT if you want this to work on 386bsd!!!*/
-
- #define ADDITIONAL_FEATURES \
- ADD_FEATURE("386BSD");\
- ADD_FEATURE("CLX-LITTLE-ENDIAN");
-
- #define I386 /* ?? this is apparently not used anywhere */
- #define IEEEFLOAT
-
- #undef HAVE_XDR
-
- #define USE_ATT_TIME
-
- /* begin listen for input */
- #undef LISTEN_FOR_INPUT /* default in bsd.h is loser in 386bsd */
- #if 1 /* Required for CLX to work correctly */
- #if defined IN_FILE
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/time.h>
- #include <stdio.h>
- #endif
- #define LISTEN_FOR_INPUT(fp) \
- {\
- int fd = (fp)->_file;\
- static struct timeval tv = {0,0};\
- static fd_set rmask; FD_ZERO(&rmask); FD_SET(fd,&rmask);\
- select(fd+1,&rmask,NULL,NULL,&tv);\
- return (FD_ISSET(fd,&rmask));\
- }
- #endif
- /* end listen for input */
-
- /* we dont need to worry about zeroing fp->_base , to prevent */
- #define FCLOSE_SETBUF_OK
-
- #define DATA_BEGIN (char *)N_DATADDR(header);
- #define UNIXSAVE "unexlin.c"
-
- #define RELOC_FILE "rel_sun3.c" /* for SFASL - enabled in bsd.h */
-
- #define LITTLE_ENDIAN /* also in <machine/endian.h> */
- #if 0 /* are these relics? */
- #define USE_DIRENT
- #define GETPATHNAME
- #define PATHNAME_CACHE 10 /* ??? */
- #endif
-
- #define HZ 60
-
- /* this for GC */
-
- /* #define PAGEWIDTH 12 /* i386 sees 4096 byte pages */
- /* try out the gnu malloc */
- #if 1 /* (conflict with PAGEWIDTH != 11) */
- #define GNU_MALLOC /* works if PAGEWIDTH==11 */
- #define GNUMALLOC
- #endif
-
- #if 0 /* wont work, but need to patch
- realloc to return something if ptr is null */
- #define DONT_NEED_MALLOC
- #endif
-
- #define INSTALL_SEGMENTATION_CATCHER \
- (void) signal(SIGSEGV,segmentation_catcher); \
- (void) signal(SIGBUS,segmentation_catcher)
-
- /* Begin for cmpinclude */
- /* yes we have alloca */
- #define HAVE_ALLOCA
-
- #define WANT_SGC
-
- #ifdef WANT_SGC /* begin defines for SGC */
- /*
- SGC is a performance winner for large applications as it doesn't
- run the entire image through the pager during collection. SGC requires
- the 'mprotect' function.
-
- Need Jeffrey Hsu's kernel patch for signal handlers. Should be in
- FreeBSD versions later than 1.0.2.
-
- Also need to add
- #include <sys/types.h> before
- #include <sys/mman.h> in c/sgc.c
-
- Also - the above handler conflicts with use of '(un)catch-bad-signals'
- You may want to modify unixint.c to account for SGC use.
-
- */
- #define SGC
- #define SIGPROTV SIGBUS
- #endif /* end of SGC mods */
-
- /* _setjmp and _longjmp exist on bsd and are more efficient
- and handle the C stack which is all we need. [I think!]
- */
- #define setjmp _setjmp
- #define longjmp _longjmp
-
-
-